/**
 * 数据字典 hook
 * @author luguoxiang
 * @date 2024-06-19
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
import {toMap} from "@/soar/utils/data"
import {getDicts} from "@/api/common";
import {ref} from "vue";

/**
 * 使用数据字典，用于翻译字典值（格式：{ [value]: label }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDict(codes: string | string[]) {
	if (typeof codes === 'string') {
		codes = codes.split(',');
	}

	const exports: any = {};
	for (const code of codes) {
		exports[code] = ref({});
	}

	getDicts(codes).then((res: any) => {
		res = res.data;
		for (const code of codes) {
			const dict = res[code];
			exports[code].value = toMap(dict, 'value', 'label')
		}
	})

	return exports;
}

/**
 * 使用数据字典，用于反向映射字段值（格式：{ [label]: value }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictMapper(codes: string | string[]) {
	if (typeof codes === 'string') {
		codes = codes.split(',');
	}

	const exports: any = {};
	for (const code of codes) {
		exports[code] = ref({});
	}

	getDicts(codes).then((res: any) => {
		res = res.data;
		for (const code of codes) {
			const dict = res[code];
			exports[code].value = toMap(dict, 'label', 'value')
		}
	})

	return exports;
}

/**
 * 使用数据字典（格式：{ [value]: dict }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictMap(codes: string | string[]) {
	if (typeof codes === 'string') {
		codes = codes.split(',');
	}

	const exports: any = {};
	for (const code of codes) {
		exports[code] = ref({});
	}

	getDicts(codes).then((res: any) => {
		res = res.data;
		for (const code of codes) {
			const dict = res[code];
			exports[code].value = toMap(dict, 'value', (x: any) => x)
		}
	})

	return exports;
}

/**
 * 使用数据字典，用于反向映射字典（格式：{ [label]: dict }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictMapperMap(codes: string | string[]) {
	if (typeof codes === 'string') {
		codes = codes.split(',');
	}

	const exports: any = {};
	for (const code of codes) {
		exports[code] = ref({});
	}

	getDicts(codes).then((res: any) => {
		res = res.data;
		for (const code of codes) {
			const dict = res[code];
			exports[code].value = toMap(dict, 'label', (x: any) => x)
		}
	})

	return exports;
}

/**
 * 使用数据字典（格式：dict[]）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictList(codes: string | string[]) {
	if (typeof codes === 'string') {
		codes = codes.split(',');
	}

	const exports: any = {};
	for (const code of codes) {
		exports[code] = ref([]);
	}

	getDicts(codes).then((res: any) => {
		res = res.data;
		for (const code of codes) {
			exports[code].value = res[code]
		}
	})

	return exports;
}
